iT邦幫忙

2021 iThome 鐵人賽

DAY 18
0

昨天介紹完kmeans演算法,今天就要實際寫程式:
首先先創建一筆資料並繪圖:
程式如下:

import numpy as np
label_data=np.array([[45,59],[52,63],[18,52],[72,24],[20,36],[12,39],[53,23],[52,70],[45,63],[24,55],[33,46],[28,30],[29,54],[55,14],[61,8],[69,7],[64,19],[51,66]])
label_data_x=[label_data[i][0] for i in range(len(label_data))]
label_data_y=[label_data[i][1] for i in range(len(label_data))]
print(label_data_x)
print(label_data_y)

import matplotlib.pyplot as plt
plt.scatter(label_data_x,label_data_y)
plt.show()

結果如下:

https://ithelp.ithome.com.tw/upload/images/20211002/20141654yUABhNYUxZ.png

之後寫出起始中心點位置:(設定d=3-->分3群)

#先決定要分幾群
d=3
#由於數據x,y最大值為70左右
import random
x_y_used=[]
color_used=[]
#設定種子
random.seed(150)
for i in range(d):
	#避免重複中心點
	while True:
		x=random.randint(0,70)
		y=random.randint(0,70)
		if [x,y] not in x_y_used:
			break
	x_y_used.append([x,y])
	#避免重複顏色
	while True:
		color_use = ["#"+''.join([random.choice('0123456789ABCDEF') for j in range(6)])]
		if color_use not in color_used:
			color_used.append(color_use)
			break
	plt.scatter(x,y,color=color_use)

plt.show()

結果如圖:
https://ithelp.ithome.com.tw/upload/images/20211002/20141654GnM5fmxqlW.png
接下來針對這張圖的中心點我們去算歐式距離:(程式碼如下)

#幫資料分類
for i in range(len(label_data_x)):
	k=[]
	for j in range(d):
		#計算歐式距離
		value_k=np.sqrt((x_y_used[j][0]-label_data_x[i])**2+(x_y_used[j][1]-label_data_y[i])**2)
		k.append(value_k)
	#取最小
	tmp = min(k)
	index = k.index(tmp)
	print("第",i+1,"筆資料為第",index+1,'類')
	#畫在圖上
	plt.scatter(label_data_x[i],label_data_y[i],color=color_used[index])
plt.show()
第 1 筆資料為第 1 類
第 2 筆資料為第 1 類
第 3 筆資料為第 1 類
第 4 筆資料為第 2 類
第 5 筆資料為第 3 類
第 6 筆資料為第 3 類
第 7 筆資料為第 2 類
第 8 筆資料為第 1 類
第 9 筆資料為第 1 類
第 10 筆資料為第 1 類
第 11 筆資料為第 1 類
第 12 筆資料為第 3 類
第 13 筆資料為第 1 類
第 14 筆資料為第 2 類
第 15 筆資料為第 2 類
第 16 筆資料為第 2 類
第 17 筆資料為第 2 類
第 18 筆資料為第 1 類

結果如圖:
https://ithelp.ithome.com.tw/upload/images/20211002/20141654MTx8Ga3Jcd.png
接下來我們就可以利用這些新的點去找中心點,然後再算距離分類,直到分類不再變動為止
好,今天講解關於kmeans演算法程式一半,明天就要就繼續後半段的程式碼

狐狸抱著男子沖到了木屋裡,頓時兩個人都著起了火,男子不屑的冷笑,用手撥了撥身上的火焰,火焰瞬間被他吸收,因為火是他發出,它當然可以吸收,正當他得意看向狐狸卻發現狐狸雖然被火焰燃燒,卻像沒事一般,而傷口在火燒之後結痂,不再流血,男子用一種奇怪的表情望向著狐狸,隨即他彈了一個響指,火焰瞬間熄滅,只剩焦黑的木屋和對峙的兩人,正當兩人僵持不下時,屋外傳來了歌聲
		--|你相信了什麼?你忘記了什麼?|--  CS.MM

上一篇
DAY17聚類演算法
下一篇
DAY19聚類演算法(kmeans)
系列文
數據分析方法研究和理解演算法30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言